const userAgent = navigator.userAgent;
const userAgentLowerCase = userAgent.toLowerCase();

// 是否小程序环境
export const isMiniprogram = () => window.__wxjs_environment === 'miniprogram' || userAgent.includes('miniProgram');

// 是否微信环境
export const isWeChat = () => userAgentLowerCase.includes('micromessenger');

// 苹果桌面快捷方式
export const isiOSDeskTop = () => userAgentLowerCase.includes('applewebkit') && window.navigator.standalone;

// 安卓桌面安装包快捷方式
export const isAndroidDeskTop = () => !!userAgent.match(/\(i[^;]+;( U;)? CPuserAgent.+Mac OS X/) && userAgent.includes('SupperApp_Android');

// 是否android终端
export const isAndroid = () => userAgent.includes('Android');

// 是否IOS终端
export const isiOS = () => !!userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);

// 是否iPad
export const isiPad = () => !!userAgent.includes('iPad');

// 是否PC端
export function isPC() {
  const Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod'];
  let flag = true;
  if (isiOS() || isAndroid()) {
    return false;
  }
  for (let i = 0; i < Agents.length; i++) {
    if (userAgent.includes(Agents[i])) {
      flag = false;
      break;
    }
  }
  return flag;
}

/**
 * 获取当前环境值
 *
 * @param  {array} envArray - 需要设置特定的环境,区分当前处于具体的应用里面
 * @returns  {Array<string>}
 */
export const getEnv = (envArray = []) => {
  // 环境
  const env = [...envArray];

  if (isPC()) {
    // 桌面客户端
    env.push('pc-wps');
  } else {
    // 原生客户端
    env.push('native-wps');
  }

  // 微信小程序h5页面
  if (isMiniprogram()) {
    env.push('miniprogram');
  } else if (isWeChat()) {
    // 微信h5页面
    env.push('wechat');
  }

  if (isAndroid()) {
    // 安卓端
    env.push('android');

    if (isAndroidDeskTop()) {
      // 安卓桌面安装包快捷方式
      env.push('androidDeskTop');
    }
  } else if (isiPad()) {
    // iPad
    env.push('ipad');
  } else if (isiOS()) {
    // 苹果端
    env.push('ios');
    if (isiOSDeskTop()) {
      // 苹果桌面快捷方式
      env.push('iosDeskTop');
    }
  } else if (isPC()) {
    // PC桌面端
    env.push('pc');
  } else {
    // 浏览器的模拟手机模式
    env.push('others');
  }

  return [...new Set(env)];
};
